package com.zm.admin.zmeng.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zm.admin.zmeng.domain.ZmOrg;
import com.zm.admin.zmeng.domain.ZmUser;
import com.zm.admin.zmeng.dto.OrgAllDTO;
import com.zm.admin.zmeng.dto.OrgDTO;
import com.zm.admin.zmeng.dto.UserDto;
import org.apache.catalina.User;
import org.apache.ibatis.annotations.Param;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public interface ZmOrgMapper extends BaseMapper<ZmOrg> {

    /**
     * 根据用户id查询其对应组织
     * @param id
     * @return
     */
    ZmOrg selectUserOrg(String id);

    /**
     * 根据组织id查询其所有下/上级组织
     * @param id
     * @return
     */
    List<OrgAllDTO> selectOrgAll(@Param("id")String id, @Param("type") String type);

    /**
     * 根据组织id查询其所有下属用户
     * @param set
     * @return
     */
    List<ZmUser> selectUserForOrg(IPage<ZmUser> page, @Param("set") HashSet<String> set, @Param("userDto")UserDto userDto);

    /**
     * 查询对应组织的一级子组织的具体信息和二级子组织id（看是否包含二级组织）
     * 分组保证不会重复，因为一个组织的某个一级组织下可能有多个二级组织，就会查出多条重复的一级组织
     * 补：为查询得分组，但是为了修改就不能分组，因为修改一个组织的状态，其下属组织都得改
     * 为什么要查二级：从下面注释看是层级展开明明不需要查再下一级的内容，主要是为了判断一级子组织是否还包含子组织，故此
     * @return
     */
    List<OrgDTO> selectSeniorOrg(@Param("id")String id,@Param("type") String type);

    /**
     * 删除组织及其下级组织
     * @param list
     */
    void delOrg(@Param("list") List<String> list);

    /**
     * 根据id集合获取对应组织集合
     * @param list
     * @return
     */
    List<ZmOrg> selectOrgInIDs(@Param("list") Set<String> list);


}